package com.shujia

/**
  * 面向对象编程
  * 类中可以定义属性、方法、构造函数
  */

/**
  * {}就是scala中类默认的构造函数
  * id: String, name: String, age: Int 构造函数的参数
  */
class Student(id: String, name: String, age: Int) {
  println("默认的构造函数")
  //直接定义类的属性
  val _id: String = id
  val _name: String = name
  val _age: Int = age
  var _clazz: String = _

  // 重载构造方法 需要重新实现this方法
  // 第一行代码必须调用默认的构造方法
  def this(id:String,name:String,age:Int,clazz:String){
    this(id,name,age)
    _clazz=clazz
    println("重载构造方法")
  }

  // 重写了父类的toString方法
  // 如果变量名以下划线开头 需要用花括号括起来
  // 如果想调用变量的某个方法 也需要用花括号括起来
  // return 可以省略 最后一行代码默认是返回的值
  override def toString = s"Student(${_id}, ${_name}, ${_age}, ${_clazz})"

  def printName(): Unit ={
    println(this._name)
  }
}
object Demo6ScalaClass{
  def main(args: Array[String]): Unit = {
    val stu1: Student = new Student("001","张三",21)
    println(stu1._id)
    println(stu1._name)
    println(stu1._age)
    stu1.printName()
    println(stu1)

    val stu2: Student = new Student("002","李四",30,"文科一班")
    println(stu2._id)
    println(stu2._name)
    println(stu2._age)
    println(stu2._clazz)
    println(stu2)
  }
}
